package beans;

import entidades.Usuario;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import rn.UsuarioRN;
/**
 *
 * @author marcelo
 */
@ManagedBean(name = "contextoBean")
@SessionScoped
public class ContextoBean implements Serializable
{
    private static final long serialVersionUID = 5038123771517528005L;
    private Usuario usuarioLogado = null;
    private Integer anoAtual = null;
    private String dataAtual = null;
    private Boolean exibeNotificacaoBar = null;
    //private Locale localizacao = null;
    //private List<Locale> idiomas;
    
    public Usuario getUsuarioLogado() 
    {
        FacesContext context = FacesContext.getCurrentInstance();
	ExternalContext external = context.getExternalContext();
	String login = external.getRemoteUser();

	if (this.usuarioLogado == null || !login.equals(this.usuarioLogado.getLogin())) 
        {
            if (login != null) 
            {
                UsuarioRN usuarioRN = new UsuarioRN();
		this.usuarioLogado = usuarioRN.buscarPorLogin(login);
		this.anoAtual = null;

		//String[] info = this.usuarioLogado.getIdioma().split("_");
		//Locale locale = new Locale(info[0], info[1]);
		//context.getViewRoot().setLocale(locale);
            }
	}
	return usuarioLogado;
    }
    
    public void setUsuarioLogado(Usuario usuario) {
        this.usuarioLogado = usuario;
    }

    public Integer getAnoAtual() 
    {
        Calendar cal = Calendar.getInstance();  
        this.anoAtual = cal.get(Calendar.YEAR); 
	return this.anoAtual;
    }

    public void setAnoAtual(Integer anoAtual) {
        this.anoAtual = anoAtual;
    }
    
    /*
    public Conta getContaAtiva() 
    {
        if (this.contaAtiva == null) 
        {
            Usuario usuario = this.getUsuarioLogado();
            ContaRN contaRN = new ContaRN();
            this.contaAtiva = contaRN.buscarFavorita(usuario);

            if (this.contaAtiva == null) 
            {
                List<Conta> contas = contaRN.listar(usuario);
		if (contas != null) 
                {
                    for (Conta conta : contas) 
                    {
                        this.contaAtiva = conta;
			break;
                    }
                }
            }
	}
	return this.contaAtiva;
    }

    public void setContaAtiva(ValueChangeEvent event) 
    {
        Integer conta = (Integer) event.getNewValue();
	ContaRN contaRN = new ContaRN();
	this.contaAtiva = contaRN.carregar(conta);

    }

    public Locale getLocaleUsuario() 
    {
        if (this.localizacao == null) 
        {
            Usuario usuario = this.getUsuarioLogado();
            String idioma = usuario.getIdioma();
            String[] info = idioma.split("_");
            this.localizacao = new Locale(info[0], info[1]);
	}
	return this.localizacao;
    }

    public List<Locale> getIdiomas() 
    {
        FacesContext context = FacesContext.getCurrentInstance();
	Iterator<Locale> locales = context.getApplication().getSupportedLocales();
	this.idiomas = new ArrayList<Locale>();
	while (locales.hasNext()) {
            this.idiomas.add(locales.next());
	}
	return idiomas;
    }

    public void setIdiomaUsuario(String idioma) 
    {
        UsuarioRN usuarioRN = new UsuarioRN();
	this.usuarioLogado = usuarioRN.carregar(this.getUsuarioLogado().getCodigo());
	this.usuarioLogado.setIdioma(idioma);
	usuarioRN.salvar(this.usuarioLogado);

	String[] info = idioma.split("_");
	Locale locale = new Locale(info[0], info[1]);

	FacesContext context = FacesContext.getCurrentInstance();
	context.getViewRoot().setLocale(locale);
    }
    */
    

    /*
    public Boolean getExibeNotificacaoBar() throws ParseException, Exception 
    {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // Instrução criada para formatar a data sem os minutos para permitir localizar a data registrada no banco
        String novaData = sdf.format(new Date());
        Date dt = sdf.parse(novaData);  
    
        AniversariantesRN aniversariantesRN = new AniversariantesRN();
        String aniversariantes = aniversariantesRN.listarAniversariantesHoje();
            
        AgendaRN agendaRN = new AgendaRN();
        Agenda agenda = agendaRN.carregar(dt);

        RevisaoRN revisaoRN = new RevisaoRN();
        List<Revisao> revisoes = revisaoRN.listarRevisoesPorData(dt);
        
        if ((aniversariantes.equals("Não há.") || aniversariantes.isEmpty()) && (agenda == null) && (revisoes == null || revisoes.isEmpty())) {
            this.setExibeNotificacaoBar(false);
            return false;
        }
        else {
            this.setExibeNotificacaoBar(true);
            return true;
        }
    }

    public void setExibeNotificacaoBar(Boolean exibeNotificacaoBar) {
        this.exibeNotificacaoBar = exibeNotificacaoBar;
    }
*/
    public String getDataAtual() 
    {
        SimpleDateFormat sdf = new SimpleDateFormat("dd MMMMMMMM yyyy"); // Instrução criada para formatar a data sem os minutos para permitir localizar a data registrada no banco
        String dataHoje = sdf.format(new Date());
        return dataHoje;
    }

    public void setDataAtual(String dataAtual) {
        this.dataAtual = dataAtual;
    }

}